package com.king.designpatterns.hybriddesignpattern.hybriddesignpattern.factorystrategypatterns;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 场景应用类
 *
 * 一家大型集团计划建立一个全国“一卡通”计划，每个员工配备一张 IC 卡，该卡在集团内部用于门禁系统、办公系统等，
 * 除此之外还可以进行消费，如到食堂吃饭、借书、理发等。该一卡通中有一个非常重要的交易扣款子模块，
 * 对于每个员工来说，他的 IC 卡上有以下两种金额。
 *
 * @author king
 * @date 2021-06-13 23:23
 */
public class Client {
    public static void main(String[] args) {
        // 初始化一张IC卡
        Card card = new Card("100010", 300, 500);
        System.out.println("==========IC卡初始信息==========");
        card.showCard();
        // 接受用户选择，初始化为N
        String choice = "N";
        // 只要用户选择的不是y或Y，就一直循环，否则退出系统
        while(!choice.equalsIgnoreCase("y")){
            // 创建一个交易对象
            Trade trade = new Trade();
            System.out.println("请输入交易编号：");
            trade.setTradeNo(getInput());
            System.out.println("请输入交易金额：");
            trade.setAmount(Double.parseDouble(getInput()));
            // 进行交易：执行扣款操作
            DeductionFacade.deduct(card, trade);
            // 显示交易后ID卡中的信息
            card.showCard();
            System.out.println("受否退出系统？（Y/N）：");
            choice = getInput();
        }
    }

    /**
     * 从键盘获取输入数据
     */
    public static String getInput() {
        String str = "";
        try {
            str = (new BufferedReader(new InputStreamReader(System.in))).readLine();
        }catch (IOException e){
            e.printStackTrace();
        }
        return str;
    }
}
